home *** CD-ROM | disk | FTP | other *** search
- //-----------------------------------------------------------------------------
- // Torque Game Engine
- // Copyright (C) GarageGames.com, Inc.
- //-----------------------------------------------------------------------------
-
- //-----------------------------------------------------------------------------
- // Functions that implement game-play
- //-----------------------------------------------------------------------------
-
- package DemoSceneGame {
-
- //-----------------------------------------------------------------------------
-
- function GameConnection::onClientEnterGame(%this)
- {
- commandToClient(%this,'SyncClock', $Sim::Time - $Game::StartTime);
- commandToClient(%this,'SetGameGUI',"SceneGui");
-
- // Create a new camera object.
- %this.camera = new Camera() {
- dataBlock = Observer;
- };
- MissionCleanup.add( %this.camera );
- %this.camera.scopeToClient(%this);
-
- // Create path camera
- %this.player = new PathCamera() {
- dataBlock = LoopingCam;
- position = Scene::getStartPos();
- };
- MissionCleanup.add( %this.player );
- %this.player.scopeToClient(%this);
-
- // Start up the room gui system
- $Server::Client = %this;
- %this.setControlObject(%this.player);
- SceneGui.setSceneNumber(0);
-
- // Force detail settings
- $Pref::TS::detailAdjust = 1;
- $Pref::TS::screenError = 10;
-
- // Start NPC orcs
- newNPCOrc("MissionGroup/Paths/OrcNPC1",0.75);
- newNPCOrc("MissionGroup/Paths/OrcNPC2",0.75);
- newNPCOrc("MissionGroup/Paths/OrcNPC3",0.40);
- }
-
- //-----------------------------------------------------------------------------
-
- function GameConnection::createPlayer(%this, %spawnPoint)
- {
- }
-
-
- //-----------------------------------------------------------------------------
-
- function serverCmdSuicide(%client)
- {
- if (isObject(%client.player)) {
- %client.player.delete();
- %client.player = 0;
- }
- %client.spawnPlayer();
- }
-
- };
-
-
- //-----------------------------------------------------------------------------
- // Scene Class
- //-----------------------------------------------------------------------------
-
- $Server::CurrentScene = 0;
-
- // Scene activation is driven from the DemoGui and related scripts.
- // (see demo/client/scripts/demoGui.cs)
- function Scene::activateScene(%number)
- {
- if (isObject($Server::CurrentScene))
- $Server::CurrentScene.close();
-
- $Server::CurrentScene = "MissionGroup/Scenes".getObject(%number);
- echo("Activating Scene #"@%number);
- $Server::CurrentScene.open();
- return $Server::CurrentScene;
- }
-
- function Scene::open(%this)
- {
- echo("Scene " @ %this.getName() @ " open");
- %client = $Server::Client;
-
- // Push any scene specific controls
- if (isObject(%this.gui))
- Canvas.pushDialog(%this.gui);
-
- // Set the path to follow, the camera will start at
- // the first node in the path.
- %path = %this.getId() @ "/path";
- if (isObject(%path)) {
- %client.player.reset(0);
- %client.player.followPath(%path);
- }
- else {
- // Check for a static camera
- %start = %this.getId() @ "/start";
- if (isObject(%start)) {
- echo("Static Camera");
- %client.player.reset(0);
- %client.player.pushNode(%start);
- %client.player.popFront();
- }
- }
- }
-
- function Scene::getStartPos()
- {
- %scene = "MissionGroup/Scenes".getObject(0);
- %start = %scene.getId() @ "/start";
- if (isObject(%start))
- return %start.getTransform();
- return "0 0 100";
- }
-
- function Scene::close(%this)
- {
- %client = $Server::Client;
-
- // Pop any scene specific controls
- if (isObject(%this.gui))
- Canvas.popDialog(%this.gui);
-
- echo("Scene " @ %this.getName() @ " closed");
- }
-
-
- //-----------------------------------------------------------------------------
- // Orc Animation
- //-----------------------------------------------------------------------------
-
- function newNPCOrc(%path,%speed)
- {
- %orc = AIPlayer::spawnOnPath("NPC",%path);
- %orc.setMoveSpeed(%speed);
- %orc.mountImage(CrossbowImage,0);
- %orc.pushTask("followPath(\""@%path@"\",-1)");
- }
-
-
- function newAnimationOrc()
- {
- if (isObject($AnimationOrc))
- $AnimationOrc.clearTasks();
- else {
- $AnimationOrc = AIPlayer::spawnOnPath("Tarkof","MissionGroup/Paths/OrcAnimation");
- $AnimationOrc.setMoveSpeed(0.75);
- $AnimationOrc.mountImage(CrossbowImage,0);
- $AnimationOrc.setInventory(CrossbowAmmo,1000);
- }
- $AnimationOrc.pushTask("followPath(\"MissionGroup/Paths/OrcAnimation\",100)");
- }
-
- function deleteAnimationOrc()
- {
- if (isObject($AnimationOrc)) {
- $AnimationOrc.clearTasks();
- $AnimationOrc.pushTask("followPath(\"MissionGroup/Paths/OrcAnimation\",0)");
- $AnimationOrc.pushTask("done()");
- }
- }
-
- function AnimationOrcPlay(%anim)
- {
- $AnimationOrc.clearTasks();
- $AnimationOrc.pushTask("animate(\""@%anim@"\")");
- }
-
- function newDancingOrc()
- {
- if (isObject($DancingOrc))
- $DancingOrc.clearTasks();
- else {
- $DancingOrc = AIPlayer::spawnOnPath("Dance","MissionGroup/Paths/OrcDance");
- $DancingOrc.setMoveSpeed(0.75);
- }
- $DancingOrc.pushTask("followPath(\"MissionGroup/Paths/OrcDance\",100)");
- $DancingOrc.pushTask("animate(\"dance\")");
- }
-
- function deleteDancingOrc()
- {
- if (isObject($DancingOrc)) {
- $DancingOrc.clearTasks();
- $DancingOrc.pushTask("followPath(\"MissionGroup/Paths/OrcDance\",0)");
- $DancingOrc.pushTask("done()");
- }
- }
-
- function newDetailOrc()
- {
- if (isObject($DetailOrc)) {
- $DetailOrc.clearTasks();
- $DetailOrc.unmountImage(0);
- $DetailOrc.unmountImage(1);
- $DetailOrc.setArmThread("looknw");
- }
- else {
- $DetailOrc = AIPlayer::spawnOnPath("Detail","MissionGroup/Paths/OrcDetail");
- $DetailOrc.setMoveSpeed(0.75);
- $DetailOrc.setArmThread("looknw");
- }
- $DetailOrc.pushTask("followPath(\"MissionGroup/Paths/OrcDetail\",100)");
- }
-
- function deleteDetailOrc()
- {
- if (isObject($DetailOrc)) {
- $DetailOrc.clearTasks();
- $DetailOrc.pushTask("followPath(\"MissionGroup/Paths/OrcDetail\",0)");
- $DetailOrc.pushTask("done()");
- }
- }
-
- function mountDetailOrc(%object,%slot)
- {
- if ($DetailOrc.getMountedImage(%slot) == %object.getId()) {
- $DetailOrc.unmountImage(%slot);
- if (%slot == 0)
- $DetailOrc.setArmThread("looknw");
- }
- else {
- $DetailOrc.mountImage(%object,%slot);
- if (%slot == 0)
- $DetailOrc.setArmThread("look");
- }
- }
-
- function newShootingOrc()
- {
- if (isObject($ShootingOrc))
- $ShootingOrc.clearTasks();
- else {
- $ShootingOrc = AIPlayer::spawnOnPath("Detail","MissionGroup/Paths/OrcShooting");
- $ShootingOrc.mountImage(CrossbowImage,0);
- $ShootingOrc.setInventory(CrossbowAmmo,500000);
- $ShootingOrc.setMoveSpeed(0.75);
- }
- $ShootingOrc.pushTask("followPath(\"MissionGroup/Paths/OrcShooting\",100)");
- $ShootingOrc.pushTask("aimAt(\"MissionGroup/Scenes/ProjectileScene/target\")");
- $ShootingOrc.pushTask("wait(1)");
- $ShootingOrc.pushTask("fire(true)");
- }
-
- function deleteShootingOrc()
- {
- if (isObject($ShootingOrc)) {
- $ShootingOrc.clearTasks();
- $ShootingOrc.pushTask("fire(false)");
- $ShootingOrc.pushTask("followPath(\"MissionGroup/Paths/OrcShooting\",0)");
- $ShootingOrc.pushTask("done()");
- }
- }
-
-
- //-----------------------------------------------------------------------------
- // Environment effects
- //-----------------------------------------------------------------------------
-
- function startRain()
- {
- if (!isObject($Rain))
- $Rain = new Precipitation() {
- datablock = "HeavyRain";
- minSpeed = 10;
- maxSpeed = 15;
- numDrops = 800;
- boxWidth = 80;
- boxHeight = 50;
- minMass = 0.05;
- maxMass = 5;
- rotateWithCamVel = true;
- doCollision = true;
- useTurbulence = true;
- maxTurbulence = 0.1;
- turbulenceSpeed = 0.2;
-
- };
- if (!isObject($Rain2))
- $Rain2 = new Precipitation() {
- datablock = "HeavyRain2";
- minSpeed = 0.3;
- maxSpeed = 0.6;
- numDrops = 100;
- boxWidth = 100;
- boxHeight = 100;
- minMass = 0.01;
- maxMass = 1;
- maxTurbulence = 0.05;
- turbulenceSpeed = 0.15;
- rotateWithCamVel = true;
- doCollision = false;
- useTurbulence = true;
- };
-
- }
-
- function stopRain()
- {
- if (isObject($Rain))
- $Rain.delete();
- $Rain = "";
-
- if (isObject($Rain2))
- $Rain2.delete();
- $Rain2 = "";
-
- }
-
- function startLightning()
- {
- if (!isObject($Lightning))
- $Lightning = new Lightning() {
- position = "350 300 180";
- scale = "250 400 500";
- dataBlock = "LightningStorm";
- strikesPerMinute = "50";
- strikeWidth = "2.5";
- chanceToHitTarget = "100";
- strikeRadius = "50";
- boltStartRadius = "20";
- color = "1.000000 1.000000 1.000000 1.000000";
- fadeColor = "0.400000 0.400000 0.100000 1.000000";
- useFog = "1";
- locked = "false";
- };
- }
-
- function stopLightning()
- {
- if (isObject($Lightning))
- $Lightning.delete();
- $Lightning = "";
- }
-
-
- //-----------------------------------------------------------------------------
- // Scenes
- //-----------------------------------------------------------------------------
-
- function InteriorSpaces::open(%this)
- {
- Parent::open(%this);
- newAnimationOrc();
- }
-
- function InteriorSpaces::close(%this)
- {
- Parent::close(%this);
- deleteAnimationOrc();
- }
-
- function OrcAnimationScene::open(%this)
- {
- Parent::open(%this);
- newAnimationOrc();
- deleteDancingOrc();
- $AnimationOrc.pushTask("wait(0.5)");
- $AnimationOrc.pushTask("animate(\"celwave\")");
- }
-
- function OrcDanceScene::open(%this)
- {
- Parent::open(%this);
- deleteAnimationOrc();
- newDancingOrc();
- }
-
- function OrcShadowScene::open(%this)
- {
- Parent::open(%this);
- newDancingOrc();
- deleteDetailOrc();
- }
-
- function OrcDetailScene::open(%this)
- {
- Parent::open(%this);
- deleteDancingOrc();
- newDetailOrc();
- %this.detailSetting = $Pref::TS::detailAdjust;
- %this.screenError = $pref::TS::screenError;
- DetailSceneSlider.setValue($Pref::TS::detailAdjust);
- }
-
- function OrcDetailScene::close(%this)
- {
- $Pref::TS::detailAdjust = %this.detailSetting;
- $Pref::TS::detailAdjust = %this.screenError;
- DetailSceneSlider.setValue(%this.detailSetting);
- Parent::close(%this);
- }
-
- function OrcDetailScene::slider(%this)
- {
- $Pref::TS::detailAdjust = DetailSceneSlider.getValue();
- $Pref::TS::screenError = 1 + 35 * (1 - $Pref::TS::detailAdjust);
- }
-
- function OrcMountingScene::open(%this)
- {
- Parent::open(%this);
- newDetailOrc();
- deleteShootingOrc();
- }
-
- function ProjectileScene::open(%this)
- {
- Parent::open(%this);
- deleteDetailOrc();
- newShootingOrc();
- }
-
- function ExplosionScene::open(%this)
- {
- Parent::open(%this);
- newShootingOrc();
- }
-
- function FXLightScene::open(%this)
- {
- Parent::open(%this);
- deleteShootingOrc();
- }
-
- function MirrorScene::open(%this)
- {
- Parent::open(%this);
- stopRain();
- }
-
- function PrecipitationScene::open(%this)
- {
- Parent::open(%this);
- startRain();
- stopLightning();
- }
-
- function LightningScene::open(%this)
- {
- Parent::open(%this);
- startRain();
- startLightning();
- Sky.stormFog(0,3);
- }
-
- function FogScene::open(%this)
- {
- Parent::open(%this);
- Sky.stormFog(1,3);
- startRain();
- stopLightning();
- }
-
- function InFogScene::open(%this)
- {
- Parent::open(%this);
- Sky.stormFog(1,3);
- startRain();
- }
-
- function WaterScene::open(%this)
- {
- Parent::open(%this);
- Sky.stormFog(0,3);
- stopRain();
- }
-
- function TorqueScene::open(%this)
- {
- Parent::open(%this);
- TorqueLogoScreen.visible = 0;
- }
-
- //-----------------------------------------------------------------------------
- // Path Camera
- //-----------------------------------------------------------------------------
-
- datablock PathCameraData(LoopingCam)
- {
- mode = "";
- };
-
- function LoopingCam::onNode(%this,%camera,%node)
- {
- if (%node == %camera.loopNode) {
- %camera.pushPath(%camera.path);
- %camera.loopNode += %camera.path.getCount();
- }
- }
-
- function PathCamera::followPath(%this,%path)
- {
- %this.path = %path;
- if (!(%this.speed = %path.speed))
- %this.speed = 100;
- if (%path.isLooping)
- %this.loopNode = %path.getCount() - 2;
- else
- %this.loopNode = -1;
-
- %this.pushPath(%path);
- %this.popFront();
- }
-
- function PathCamera::pushPath(%this,%path)
- {
- for (%i = 0; %i < %path.getCount(); %i++)
- %this.pushNode(%path.getObject(%i));
- }
-
- function PathCamera::pushNode(%this,%node)
- {
- if (!(%speed = %node.speed))
- %speed = %this.speed;
- if ((%type = %node.type) $= "")
- %type = "Normal";
- if ((%smoothing = %node.smoothing) $= "")
- %smoothing = "Linear";
- %this.pushBack(%node.getTransform(),%speed,%type,%smoothing);
- }
-
-
- //-----------------------------------------------------------------------------
-
- datablock ItemData(Logo)
- {
- // An item is used
- category = "Misc";
- shapeFile = "~/data/shapes/logo/torque_logo.dts";
- };
-